//导入数据库操作模块
//const db = require('../db/index.js')

//储存所有的用户
const users = new Map()

//利用webSocket发送消息的方法
exports.wsConnection = (ws) => {
    ws.isAlive = true // 初始化连接状态

    ws.on('pong', () => {
        ws.isAlive = true // 收到 pong 响应，更新连接状态
    })

    ws.on('message', (message) => {
        if (message === 'ping') {
            // 收到 ping 消息，返回 pong 响应
            ws.send('pong')
            return
        }

        // 将接收到的 message 从字符串转换为对象
        const parsedMessage = JSON.parse(message)
        if (Number.isInteger(parsedMessage)) {
            //将已登录用户加入广播集群
            users.set(parsedMessage, ws)
            console.log(`将已登录用户${parsedMessage}加入广播集群`)
        }

        if (parsedMessage.message_type) {
            if (users.get(parsedMessage.receiver_id)) {
                users.get(parsedMessage.receiver_id).send(JSON.stringify(parsedMessage))
                console.log(`${parsedMessage.message_type}已发送给用户${parsedMessage.receiver_id}`)
            } else {
                console.log(`用户${parsedMessage.receiver_id}不在线`)
            }
        }
    })

    ws.on('close', () => {
        users.forEach((userWs, userId) => {
            if (userWs === ws) {
                users.delete(userId)
                console.log(`用户${userId}断开连接！`)
            }
        })
    })

    ws.on('error', (err) => {
        console.error('WebSocket 出现错误:', err)
    })
}

// 定期检查 WebSocket 的连接状态
const interval = setInterval(() => {
    users.forEach((ws, userId) => {
        if (!ws.isAlive) {
            ws.terminate() // 连接不再存活，终止连接
            users.delete(userId) // 从用户列表中移除
            console.log(`用户${userId}连接不再存活，已移除`)
        } else {
            ws.isAlive = false // 标记为非活跃
            ws.ping() // 发送 ping 请求
        }
    })
}, 60000) // 每60秒检查一次

// 服务器关闭时清除定时器
process.on('SIGTERM', () => clearInterval(interval))
process.on('SIGINT', () => clearInterval(interval))
